#include "uart.h"

void Uart_InitAll()
{
    Uart_ConfigInit(115200);
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
eg.
Uart_ConfigInit(9600);
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void Uart_ConfigInit(u32 bound){
	UART_Cmd(UART1, DISABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    UART_InitTypeDef UART_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1ENR_UART1, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

    GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);//RX
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_1);//TX

    UART_InitStructure.UART_BaudRate = bound;
    UART_InitStructure.UART_WordLength = UART_WordLength_8b;
    UART_InitStructure.UART_StopBits = UART_StopBits_1;
    UART_InitStructure.UART_Parity = UART_Parity_No;
    UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
    UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx;

    UART_Init(UART1, &UART_InitStructure);
    UART_Cmd(UART1, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
 

	
}



/////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
eg.
UartSendByte(0x66);
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////
int UartSendByte(u8 dat){
    UART_SendData( UART1, dat);
    while(!UART_GetFlagStatus(UART1,UART_FLAG_TXEPT));
	
		return dat;
}

int fputc(int c, FILE *f) {
	UART_SendData( UART1, c);
    while(!UART_GetFlagStatus(UART1,UART_FLAG_TXEPT));
	
	return c;
	
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
eg.
u8 buf[66];
UartSendGroup(buf,6);
eg2.
u8 printfBuf[66];
UartSendGroup((u8*)printfBuf, sprintf(printfBuf,"sprintf ok\r\n"));
*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////
void UartSendGroup(u8* buf,u16 len)
{
    while(len--)
        UartSendByte(*buf++);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
eg1.
char buf[66];
UartSendAscii(buf);
eg2.
char buf[66];
UartSendAscii("hello world\r\n");
*/

void UartSendAscii(char *str){
    while(*str)
        UartSendByte(*str++);
}



uint8_t mygetchar() {
    while(UART_GetFlagStatus(UART1, UART_FLAG_RXAVL) != SET)
    {
			IWDG_ReloadCounter();
    }

    //UART_ClearFlag(UART1, UART_FLAG_RXAVL);

    return UART_ReceiveData(UART1);
}

bool mygetuint(uint32_t *result) {
    uint8_t ichar;
    *result = 0;
    while(1)
    {
        ichar = mygetchar();

//        PR("%c",ichar);

        if(ichar >='0' && ichar <= '9')
            *result = ichar - '0' + *result *10;
        else if(ichar == 0xd)
            return 1;//TRUE
        else
            return 0;//FALSE
    }
}

int SER_CheckChar (void){
  if (UART_GetFlagStatus(UART1, UART_FLAG_RXAVL) != SET)
    return (0);
  else
    return (1);
}
	

 
///*********************************************END OF FILE**********************/

